package com.cgs.query.service

import com.cgs.query.domain.Project2Define
import com.cgs.query.util.Utils

interface IProject2DefineService {

    /**
     * 保存
     */
    fun save(project2Define: Project2Define): Project2Define

    /**
     * 保存
     */
    fun save(project2Defines: Iterable<Project2Define>?)

    /**
     * 别名是否已存在
     */
    fun existAlias(projectName: String, alias: String): Boolean

    /**
     * 项目是否已存在定义联系
     */
    fun existProjectName(projectName: String): Boolean

    /**
     * 通过id查询
     */
    fun findById(id: Int): Project2Define?

    /**
     * 查询项目的所有定义别名-名称-版本号
     */
    fun findAliasDefineNameVersionVOByProjectName(projectName: String): List<AliasDefineNameVersionVO>

    /**
     * 查询一个项目所有的定义联系
     */
    fun findByProjectName(projectName: String): List<Project2Define>?

    /**
     * 查询联系
     * 通过定义id和项目名
     */
    fun findByDefineIdAndProjectName(defineId: String, projectName: String): List<Project2Define>?

    /**
     * 删除项目的关联数据
     */
    fun deleteByProjectName(projectName: String)

    /**
     * 删除定义的关联数据
     */
    fun deleteByDefineId(defineId: String)

    /**
     * 通过id删除
     */
    fun delete(id: Int)
}

/**
 * 别名-定义名-版本号
 */
class AliasDefineNameVersionVO(val alias: String?,
                               val defineName: String,
                               val version: String) {

    val wholeName
        get() = if (alias.isNullOrBlank()) {
            defineName
        } else {
            Utils.packageAliasAndDefineName(alias!!, defineName)
        }
}